﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Web;
using ClickLand.CorporacionPlaza.Presentacion.Contratos.AdministracionEstablecimiento;
using ClickLand.CorporacionPlaza.Presentacion.Controladores;
using ClickLand.CorporacionPlaza.Presentacion.CorporacionPlazaWS;

namespace ClickLand.CorporacionPlaza.Presentacion.Presentadores.AdministracionEstablecimiento
{
    /// <summary> Clase que hace de presentador para la vista que administra los establecimientos </summary>
    public class PresentadorAdministarEstablecimiento:PresentadorBase
    {
        #region Atributos

        /// <summary> Objeto que posee la informacion de la vista </summary>
        private readonly IAdministrarEstablecimiento _vista;


        /// <summary> Objeto que posee la informacion del controlador del modulo </summary>
        private readonly ControladorAdministracionEstablecimiento _controlador;

        #endregion

        #region Constructor

        /// <summary> Constructor de la clase </summary>
        /// <param name="vista">Definicion de la vista</param>
        public PresentadorAdministarEstablecimiento(IAdministrarEstablecimiento vista)
        {
            _vista = vista;
            _controlador = new ControladorAdministracionEstablecimiento();
        }

        #endregion

        #region Metodos


        /// <summary> Metodo que se encarga de las operaciones cuando se carga la pagina </summary>
        public void CargarPagina()
        {

            CargarListaConValor(_vista.ListaTipoEstablecimiento, "tipoEstablecimiento", false);
            CargarListaConValor(_vista.DdlTipoEstablecimiento, "tipoEstablecimiento", false);
            _vista.Paneles.SetActiveView(_vista.VistaPrincipal);
        }


        /// <summary>
        /// Metodo que se encarga de las operaciones para buscar los establecimiento segun 
        /// los parametros indicados </summary>
        public void BuscarEstablecimiento()
        {
            var parametros = new EstablecimientoDto();
            parametros.Lugar = _vista.DireccionBusqueda.Text;
            parametros.Tipo = new TipoEstablecimientoDto();

            if (!_vista.ListaTipoEstablecimiento.SelectedIndex.Equals(0))
                parametros.Tipo.Id = Convert.ToInt32(_vista.ListaTipoEstablecimiento.SelectedValue);

            var datos = _controlador.ConsultarEstablecimientos(parametros);

            HttpContext.Current.Session["listaEstablecimiento"] = _vista.ListaEstablecimiento.DataSource = datos;
            _vista.ListaEstablecimiento.DataBind();
        }


        /// <summary> Metodo que se encarga de las operaciones para mostrar el detalle del establecimiento </summary>
        /// <param name="id">identificador del establecimiento</param>
        public void MostrarDetalle(int id)
        {
            var lista = (List<EstablecimientoDto>)HttpContext.Current.Session["listaEstablecimiento"];
            var establecimiento = (from objeto in lista
                               where objeto.Id == id
                               select objeto).First();
            HttpContext.Current.Session["EstablecimientoEditar"] = establecimiento;
            _vista.TipoEstablecimientoDetalle.Text = establecimiento.Tipo.Descripcion;
            _vista.NumeroLocalDetalle.Text = establecimiento.Numero;
            _vista.PrecioDetalle.Text = establecimiento.Precio.ToString("N");
            _vista.DireccionDetalle.Text = establecimiento.Lugar;
            _vista.Paneles.SetActiveView(_vista.VistaDetalle);
        }


        /// <summary> Metodo que se encarga de las operaciones para mostrar la confirmacion </summary>
        public void MostrarConfirmacion()
        {

            _vista.LblTipoEstablecimientoConfirmacion.Text = _vista.DdlTipoEstablecimiento.SelectedItem.Text;
            _vista.LbNumeroLocalConfirmacion.Text = _vista.TbNumeroLocal.Text;
            _vista.LbPrecioConfirmacion.Text = _vista.TbPrecio.Text;
            _vista.LbDireccionConfirmacion.Text = _vista.TbDireccion.Text;
            _vista.Paneles.SetActiveView(_vista.VistaConfirmacion);
        }


        /// <summary> Metodo que se encarga de las operaciones para habilitar los datos para la edicion </summary>
        public void MostrarEdicion()
        {
            var establecimiento = (EstablecimientoDto)HttpContext.Current.Session["EstablecimientoEditar"];
            _vista.DdlTipoEstablecimiento.SelectedValue = establecimiento.Tipo.Id.ToString(CultureInfo.InvariantCulture);
            _vista.TbNumeroLocal.Text = establecimiento.Numero;
            _vista.TbPrecio.Text = establecimiento.Precio.ToString("N");
            _vista.TbDireccion.Text = establecimiento.Lugar;
            _vista.Paneles.SetActiveView(_vista.VistaModificacion);
            _vista.DdlTipoEstablecimiento.Enabled = false;
        }


        #endregion

        /// <summary> Metodo que se encarga de las operaciones para editar el establecimiento </summary>
        public void EditarEstablecimiento()
        {
            var establecimiento = (EstablecimientoDto)HttpContext.Current.Session["EstablecimientoEditar"];
            establecimiento.Tipo = new TipoEstablecimientoDto();
            establecimiento.Tipo.Id = _vista.DdlTipoEstablecimiento.SelectedIndex;
            establecimiento.Precio = Convert.ToSingle(_vista.LbPrecioConfirmacion.Text);
            establecimiento.Numero = _vista.TbNumeroLocal.Text;
            establecimiento.Lugar = _vista.TbDireccion.Text;
            establecimiento.Estado = 1;

            _vista.Paneles.SetActiveView(_controlador.AgregarModificarEstablecimiento(establecimiento)
                                             ? _vista.VistaExito
                                             : _vista.VistaError);
        }
    }
}
